// 知识竞赛
// 最近部门要选两个员工去参加一个需要合作的知识竞赛，
// 每个员工均有一个推理能力值ai，以及一个阅读能力值bi
// 如果选择第i个人和第j个人去参加竞赛，
// 两人在推理方面的能力为X = (ai + aj)/2
// 两人在阅读方面的能力为Y = (bi + bj)/2
// 现在需要最大化他们表现较差一方面的能力
// 即让min(X,Y) 尽可能大，问这个值最大是多少
// 测试链接 : https://www.nowcoder.com/practice/2a9089ea7e5b474fa8f688eae76bc050
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 200001;
array<int, 2> arr[MAXN];
int n;

inline int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

int compute()
{
    sort(arr, arr + n, [](auto& a, auto& b){
        // 根据推理能力和阅读能力的差值的绝对值进行排序
        return abs(a[0] - a[1]) < abs(b[0] - b[1]);
    });
    int maxA = arr[0][0]; // 左边最大的推理能力
    int maxB = arr[0][1]; // 左边最大的阅读能力
    int ans = 0;
    for(int i = 1; i < n; ++i)
    {
        // 如果 arr[i][0] <= arr[i][1]，那么推理能力
        // 一定会成为瓶颈，因为 maxA + arr[i][0] 一定
        // 是小于 maxB + arr[i][1] 的
        if(arr[i][0] <= arr[i][1])
            ans = max(ans, maxA + arr[i][0]);
        else
            ans = max(ans, maxB + arr[i][1]);
        maxA = max(maxA, arr[i][0]);
        maxB = max(maxB, arr[i][1]);
    }
    return ans / 2.0;
}

int main()
{
    n = read();
    for(int i = 0; i < n; ++i)
    {
        arr[i][0] = read(); arr[i][1] = read();
    }
    printf("%d\n", compute());

    return 0;
}